﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;

namespace DAO
{
    public static class SocioXClaseDAO
    {
        public static Clase obtenerInscriptos(int idClase, int dni)
        {
            string query = "SELECT s.soc_id, s.soc_nombre, s.soc_apellido, s.soc_dni ";
            query += "FROM Socio s JOIN SocioXClase sc ON s.soc_id = sc.scl_soc_id ";
            query += "WHERE sc.scl_cla_id = @idClase ";
            query += "AND sc.scl_fecha_baja IS NULL ";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@idClase", idClase));
            if (dni != 0)
            {
                query += "AND s.soc_dni = @dni ";
                listaParam.Add(new SqlParameter("@dni", dni));
            }
            SqlDataReader dr = DB.GenerarReader(query, listaParam);
            Clase clase = new Clase();
            clase.Id = idClase;
            while (dr.Read())
            {
                Socio socio = new Socio();
                socio.Id = int.Parse(dr["soc_id"].ToString());
                socio.Nombre = dr["soc_nombre"].ToString();
                socio.Apellido = dr["soc_apellido"].ToString();
                socio.Dni = dr["soc_dni"].ToString();
                clase.ListadoInscriptos.Add(socio);
            }
            return clase;
        }

        public static List<Socio> obtenerSocios(int idClase, int dni)
        {
            string query = "SELECT s.soc_id, s.soc_nombre, s.soc_apellido, s.soc_dni ";
            query += "FROM Socio s WHERE s.soc_fecha_baja IS NULL ";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@idClase", idClase));
            if (dni != 0)
            {
                query += "AND s.soc_dni = @dni ";
                listaParam.Add(new SqlParameter("@dni", dni));
            }
            query += "AND NOT EXISTS( ";
            query += "SELECT * FROM SocioXClase sc ";
            query += "WHERE sc.scl_cla_id = @idClase  ";
            query += "AND sc.scl_soc_id = s.soc_id  ";
            query += "AND sc.scl_fecha_baja IS NULL  )";
            
            SqlDataReader dr = DB.GenerarReader(query, listaParam);
            List<Socio> listadoSocios = new List<Socio>();
            while (dr.Read())
            {
                Socio socio = new Socio();
                socio.Id = int.Parse(dr["soc_id"].ToString());
                socio.Nombre = dr["soc_nombre"].ToString();
                socio.Apellido = dr["soc_apellido"].ToString();
                socio.Dni = dr["soc_dni"].ToString();
                listadoSocios.Add(socio);
            }
            return listadoSocios;
        }

        public static void agregarSocioClase(Socio socio, int claseId)
        {
            string query = "INSERT INTO SocioXClase (scl_soc_id, scl_cla_id) VALUES (@socioId, @claseId);";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@socioId", socio.Id));
            listaParam.Add(new SqlParameter("@claseId", claseId));
            DB.EjecutarCommand(query, listaParam);
        }
        public static void bajaSocioClase(Socio socio, int claseId)
        {
            string query = "UPDATE SocioXClase SET scl_fecha_baja = GETDATE() ";
            query += "WHERE scl_soc_id = @socioId ";
            query += "AND scl_cla_id = @claseId ";
            query += "AND scl_fecha_baja IS NULL;";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@socioId", socio.Id));
            listaParam.Add(new SqlParameter("@claseId", claseId));
            DB.EjecutarCommand(query, listaParam);
        }
    }
}
